package com.zmn.plat.business.interfaces.product;

import java.util.List;

import com.zmn.plat.model.entity.category.ServCategAndCategTwoQuery;
import com.zmn.plat.model.entity.product.ProductQuery;
import com.zmn.plat.model.entity.product.ServProduct;
import com.zmn.plat.model.vo.product.ProductAllMsgVO;

/**
 * 描述:ServProductCache 基础产品缓存类
 *
 * @author tanghongjun
 * @since: 2018/10/16 17:56
 */
public interface ProductCache {

    /**
     * 根据产品ID，查询产品所有信息
     *
     * @param productId
     * @return ProductAllMsgVO
     */
    ProductAllMsgVO findByKey(Integer productId);

    /**
     * 描述: 根据产品ID集合，查询产品所有信息
     *
     * @param productIdList
     *            产品ID集合
     * @return List《ProductAllMsgVO》
     * @auther tanghongjun
     * @since 2020/3/24 11:21
     */
    List<ProductAllMsgVO> listByKeys(List<Integer> productIdList);

    /**
     * 描述: 根据查询条件，查询产品所有信息
     *
     * @param productQuery
     * @return List《ProductAllMsgVO》
     * @auther tanghongjun
     * @since 2020/3/24 11:21
     */
    List<ProductAllMsgVO> listByProductQuery(ProductQuery productQuery);
    /**
     * 描述: 根据查询条件，查询产品所有信息
     *
     * @param query
     * @return List《ProductAllMsgVO》
     * @auther tanghongjun
     * @since 2020/3/24 11:21
     */
    List<ProductAllMsgVO> listProductByQuery(ProductQuery query);

    /**
     * 描述: 根据前台产品ID获取后台产品
     *
     * @param showProductId
     *            前台产品ID
     * @param status
     *            产品状态，可以为空，为空则查询所有复合条件的后台产品
     * @return List<ServProduct>
     * @auther tanghongjun
     * @since 2019/9/23 14:29
     */
    List<ServProduct> listProductByShowProductIdAndStatus(Integer showProductId, Integer status);

    /**
     * 描述: 根据前后台类型，产品ID或服务分类ID，产品二级分类ID，获取服务分类和产品二级分类查询实体集合
     *
     * @param type
     *            产品或分类类型 1.后台，2.前台
     * @param productId
     *            产品ID
     * @param servCategId
     *            服务分类ID
     * @param categTwoId
     *            产品二级分类ID
     * @return List<ServCategAndCategTwoQuery>
     * @auther tanghongjun
     * @since 2020/1/8 17:10
     */
    List<ServCategAndCategTwoQuery> listServCategAndCategTwoQueryByTypeAndProductIdOrCategId(Integer type, Integer productId, Integer servCategId, Integer categTwoId);

}
